package megamente.dao;


import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.sql.DataSource;

import megamente.exception.DAOExcepcion;
import megamente.modelo.Cliente;
import megamente.dao.BaseDAO;

public class ClienteDAOImpl extends BaseDAO implements ClienteDAO{
	
	private DataSource dataSource;
	
	public void setDataSource(DataSource dataSource) {
		this.dataSource = dataSource;
	}


	public boolean comprobar(String correo, String dni, String nombre, String materno, String paterno, String password) throws DAOExcepcion {
		ClienteDAOImpl Comunes = null;
		boolean status = false;
		String mail[] = {"correo@cuenta.com","mail@correo.com","usuario@correo.com"};
		if (isEmail(correo)) {
				status = true;
				System.out.println("Mail correcto");
				for (int i = 0; i < mail.length; i++) {
					if (correo!=mail[i]) {
						status = true;
						System.out.println("Mail disponible");
						if (Comunes.isNumeric(dni)){
							System.out.println(dni + " DNI es un numero");
								if (dni.length()==8) {
										status = true;
										System.out.println(dni +"el tamanio del dni es correcto");
								
									if (nombre.length()>0 && materno.length()>0 && paterno.length()>0) {
										status = true;
										System.out.println(nombre+materno+paterno+ " los nombres o apellidos son correctos");
											if (password.length()>8) {
											status = true;
											System.out.println(password+ " password de tamanio correcto");
											}else{
											status = false;
											System.out.println(password+ " password tamanio incorrecto");
											}
									}else{
										status = false;
										System.out.println(nombre+materno+paterno+ " los nombres y apellidos son incorrectos");
									}
								}else{
										status = false;
										System.out.println(dni +"el tamanio del dni es incorrecto");
								}
						}else{
							status = false;
							System.out.println(dni + " DNI no es un numero");
						}
						break;
						
					}else{
						status = false;
						System.out.println("Mail NO disponible ");
						break;
					}
				}
		}else{
				status = false;
				System.out.println("Mail incorrecto");
		}
		
		System.out.println("correo "+correo);
		System.out.println(status);
		return status;
	}

	
	public boolean insertar(Cliente cliente, String password) throws DAOExcepcion {
		boolean status = false;
		///////
		String mail[] = {"correo@cuenta.com","mail@correo.com","usuario@correo.com"};
		ClienteDAOImpl Comunes = null;
		if (isEmail(cliente.getCorreo())) {
			status = true;
			System.out.println("Mail correcto");
			for (int i = 0; i < mail.length; i++){
				if (cliente.getCorreo()!=mail[i]) 	{
					status = true;
					System.out.println("Mail disponible");
					if (Comunes.isNumeric(cliente.getDni())){
						System.out.println(cliente.getDni() + " DNI es un numero");
							if (cliente.getDni().length()==8) {
									status = true;
									System.out.println(cliente.getDni() +"el tamanio del dni es correcto");
								if (cliente.getNombre().length()>0 && cliente.getApellidoMaterno().length()>0 && cliente.getApellidoPaterno().length()>0) {
									status = true;
									System.out.println(cliente.getNombre()+cliente.getApellidoPaterno()+cliente.getApellidoMaterno()+ " los nombres o apellidos son correctos");
										if (cliente.getPassword().equals(password) ) {
										status = true;
										System.out.println(cliente.getPassword()+ " password Son Iguales");
										if (cliente.getOcupacion()>0 && cliente.getSucursal()>0) {
											status = true;
											System.out.println(cliente.getOcupacion()+cliente.getSucursal() + "Ocupacion y Sucursal Correctos");
										}else{
											status = false;
											System.out.println(cliente.getOcupacion()+cliente.getSucursal() + "Ocupacion y Sucursal Incorrectos");
										}
										
										}else{
										status = false;
										System.out.println(cliente.getPassword()+ " password No son Iguales");
										}						
								}else{
									status = false;
									System.out.println(cliente.getNombre()+cliente.getApellidoPaterno()+cliente.getApellidoMaterno()+ " los nombres y apellidos son incorrectos");
								}
							}else{
									status = false;
									System.out.println(cliente.getDni() +"el tamanio del dni es incorrecto");
							}
					}else{
						status = false;
						System.out.println(cliente.getDni() + " DNI no es un numero");
					}
					break;
				}else{
					status = false;
					System.out.println("Mail NO disponible ");
					break;
				}
			}
			
			
	}else{
			status = false;
			System.out.println("Mail incorrecto");
	}	
		
		//////////////
		
		
		
		// TODO Auto-generated method stub
		return status;
	}
	
	public boolean isEmail(String correo) {
        Pattern pat = null;
        Matcher mat = null;
        pat = Pattern.compile("^([0-9a-zA-Z]([_.w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-w]*[0-9a-zA-Z].)+([a-zA-Z]{2,9}.)+[a-zA-Z]{2,3})$");
        mat = pat.matcher(correo);
        if (mat.find()) {
            System.out.println("[" + mat.group() + "]");
            return true;
        }else{
            return false;
        }
    }
	
	      public static boolean isNumeric(String dni){

	      try {
	      Integer.parseInt(dni);
	      		return true;
	      		} catch (NumberFormatException nfe){
	    	  	return false;
	      			}
	      }

//	@Override
//	public boolean comprobar(String correo) throws DAOExcepcion {
//		boolean status = false;
//		String query = "select correo from cliente where correo = ?";
//		Connection con = null;
//		PreparedStatement stmt = null;
//		ResultSet rs = null;
//		String mail = "";
//		int valor = 0;
//		Cliente cliente = new Cliente();
//		try {
//			con = dataSource.getConnection();
//			stmt = con.prepareStatement(query);
//			stmt.setString(1, correo);
//			rs = stmt.executeQuery();
//			
//			while (rs.next()) {
//				valor = Integer.parseInt(rs.getString(1));
//			}
//			 mail = cliente.getCorreo();
//			if (valor==0) {
//				status = true;
//			}else
//				status = false;
//			
//			
//		} catch (Exception e) {
//			System.err.println(e.getMessage());
//			System.err.println("Error en comprobar");
//			System.out.println("status "+status);
//			System.out.println("correo "+mail);
//			System.out.println("id valor "+valor);
//			throw new DAOExcepcion(e.getMessage());
//			// TODO: handle exception
//		}finally {
//			this.cerrarResultSet(rs);
//			this.cerrarStatement(stmt);
//			this.cerrarConexion(con);
//		}
//		// TODO Auto-generated method stub
//		return status;
//	}
//
//	@Override
//	public Cliente insertar(Cliente vo) throws DAOExcepcion {
//		
//		String query = "INSERT INTO cliente " +
//		"VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
//		Connection con = null;
//		PreparedStatement stmt = null;
//		ResultSet rs = null;
//		PreparedStatement id_stmt = null;
//		Connection insert_con = null;
//		int id = 0;
//		int i = 0;
//		int constante = 1;
//		try {
//			con = dataSource.getConnection();
//			String query_id = "select count(Idpersona) from cliente";
//			id_stmt = con.prepareStatement(query_id);
//			rs = id_stmt.executeQuery();
//			if (rs.next()) {
//				id = rs.getInt(1);
//			}
//			id++;
//			insert_con = dataSource.getConnection();
//			stmt = insert_con.prepareStatement(query);
//			stmt.setInt(id, 1);
//			stmt.setString(2, vo.getNombre());	
//			stmt.setString(3, vo.getApellidoPaterno());
//			stmt.setString(4, vo.getApellidoMaterno());
//			stmt.setString(5, vo.getDireccion());
//			stmt.setString(6, vo.getDni());
//			stmt.setString(7, vo.getSexo());
//			stmt.setString(8, vo.getDistrito());
//			stmt.setString(9, vo.getProvincia());
//			stmt.setString(10, vo.getDepartamento());
//			stmt.setDate(11 , (Date) vo.getFechaNacimiento());
//			stmt.setString(12, vo.getTelefono());
//			stmt.setString(13, vo.getCelular());
//			stmt.setString(14, vo.getCorreo());
//			stmt.setString(15, vo.getPassword());
//			stmt.setString(16, vo.getPremium());
//			stmt.setInt(constante, 17);
//			stmt.setString(18, vo.getEstadoCivil());
//			stmt.setInt(constante, 19);
//			stmt.setString(20, vo.getFlgComedia());
//			stmt.setString(21, vo.getFlgFiccion());
//			stmt.setString(22, vo.getFlgRomantica());
//			stmt.setString(23, vo.getFlgSuspenso());
//			stmt.setString(24, vo.getFlgDrama());
//			stmt.setString(25, vo.getFlgTerror());
//			stmt.setString(26, vo.getFlgAnimado());
//			stmt.setString(27, vo.getFlgAccion());
//			stmt.setString(28, vo.getFlgAventura());
//			stmt.setString(29, vo.getFlgPolicial());
//			
//			i = stmt.executeUpdate();
//			if (i != 1) {
//				throw new SQLException("No se pudo insertar");
//			}
//		} catch (Exception e) {
//			System.err.println(e.getMessage());
//			System.err.println("Error en insertar");
//			System.out.println("id "+id);
//			System.out.println("i "+i);
//			throw new DAOExcepcion(e.getMessage());
//			// TODO: handle exception
//		}finally {
//			this.cerrarResultSet(rs);
//			this.cerrarStatement(stmt);
//			this.cerrarConexion(con);
//			this.cerrarConexion(insert_con);
//			this.cerrarStatement(id_stmt);
//		}
//		// TODO Auto-generated method stub
//		return vo;
//	}
//	
	

}
